package com.rzcode.coinex.kernel.dao.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.rzcode.coinex.kernel.common.enums.BooleanEnum;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "activity")
public class Activity implements Serializable {
    @ApiModelProperty(value = "主键ID")
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;

    /**
     * 启用禁用（决定是否显示在前端）
     */
    @ApiModelProperty(value = "启用禁用(决定是否显示在前端)")
    private BooleanEnum status = BooleanEnum.IS_FALSE;

    /**
     * 进度：0：未开始  1：进行中  2：派发中  3：已结束
     */
    @ApiModelProperty(value = "进度：0：未开始  1：进行中  2：派发中  3：已结束")
    private int step = 0;

    /**
     * 进度值（例98 = 98%）,type=4（认购活动）时有效
     */
    @ApiModelProperty(value = "进度值(例98 = 98%),type=4（认购活动）时有效")
    private int progress = 0;

    /**
     * 活动开始时间(抢购发行与分摊发行都需要设置)
     */
    @ApiModelProperty(value = "活动开始时间(抢购发行与分摊发行都需要设置)")
    private String startTime;

    /**
     * 活动结束时间(抢购发行与分摊发行都需要设置)
     */
    @ApiModelProperty(value = "活动结束时间(抢购发行与分摊发行都需要设置)")
    private String endTime;

    /**
     * 活动类型(0:未知，1：首发抢购，2：首发分摊，3：持仓瓜分，4：自由认购，5：云矿机， 6：锁仓释放）
     */
    @ApiModelProperty(value = "活动类型(0:未知，1：首发抢购，2：首发分摊，3：持仓瓜分，4：自由认购，5：云矿机， 6：锁仓释放)")
    private int type;


    /**
     * 要求一级好友不能低于该数（0：不限制，>0:限制）
     */
    @ApiModelProperty("要求一级好友不能低于该数（0：不限制，>0:限制）")
    private int levelOneCount = 0;

    /**
     * 发行总量
     */
    @ApiModelProperty("发行总量")
    private BigDecimal totalSupply = BigDecimal.ZERO;

    /**
     * 已售数量
     */
    @ApiModelProperty("已售数量")
    private BigDecimal tradedAmount = BigDecimal.ZERO;

    /**
     * 冻结资产数量
     */
    @ApiModelProperty("冻结资产数量")
    private BigDecimal freezeAmount = BigDecimal.ZERO;

    /**
     * 发行价格
     */
    @ApiModelProperty("发行价格")
    private BigDecimal price = BigDecimal.ZERO;

    /**
     * 价格精度
     */
    @ApiModelProperty("价格精度")
    private int priceScale = 0;

    /**
     * 发售单位（如BTC、ETH等）
     */
    @ApiModelProperty("发售单位(如BTC、ETH等)")
    private String unit;

    /**
     * 接受币种（如BTC、ETH等)
     */
    @ApiModelProperty("接受币种(如BTC、ETH等)")
    private String acceptUnit;

    /**
     * 数量精度
     */
    @ApiModelProperty("数量精度")
    private int amountScale = 0;

    /**
     * 单人限购总量上限（0：不限制）
     */
    @ApiModelProperty("单人限购总量上限(0：不限制)")
    private BigDecimal maxLimitAmount = BigDecimal.ZERO;

    /**
     * 单人限购总量下限(0：不限制)
     */
    @ApiModelProperty("单人限购总量下限(0：不限制)")
    private BigDecimal minLimitAmount = BigDecimal.ZERO;

    /**
     * 购买条件（如持有XXX币需大于ZZ才可以参与购买）
     */
    @ApiModelProperty("购买条件(如持有XXX币需大于ZZ才可以参与购买)")
    private BigDecimal holdLimit = BigDecimal.ZERO;

    /**
     * 持有XXX币种单位
     */
    @ApiModelProperty("持有XXX币种单位")
    private String holdUnit;

    /**
     * 限制购买次数(0：不限制)
     */
    @ApiModelProperty("限制购买次数(0：不限制)")
    private int limitTimes = 0;


    /**
     * 云矿机/锁仓释放：挖矿产出周期（0：日，1：周，2：月，3：年）
     */
    @ApiModelProperty("云矿机/锁仓释放：挖矿产出周期（0：日，1：周，2：月，3：年）")
    private int miningPeriod = 0;

    /**
     * 云矿机：挖矿持续周期数（仅type = 5设置有效，如30天/周/月/年、60天等）
     * 参数命名与实际意义不同，请注意
     */
    @ApiModelProperty("云矿机：挖矿持续周期数(仅type = 5设置有效，如30天/周/月/年、60天等)")
    private int miningDays = 0;

    /**
     * 云矿机：每天/周/月产出多少
     */
    @ApiModelProperty("云矿机：每天/周/月产出多少")
    private BigDecimal miningDaysProfit = BigDecimal.ZERO;

    /**
     * 云矿机：云矿机所挖币种
     */
    @ApiModelProperty("云矿机：云矿机所挖币种")
    private String miningUnit;

    /**
     * 锁仓释放：锁仓币种
     */
    @ApiModelProperty("锁仓释放：锁仓币种")
    private String lockedUnit;

    /**
     * 锁仓释放：锁仓释放周期（0：日，1：周，2：月，3：年）
     */
    @ApiModelProperty("锁仓释放：锁仓释放周期(0：日，1：周，2：月，3：年)")
    private int lockedPeriod;

    /**
     * 锁仓释放：释放周期数量，注意该变量名中Days的含义并不一定是天，还可以是周、月、年等
     */
    @ApiModelProperty("锁仓释放：释放周期数量，注意该变量名中Days的含义并不一定是天，还可以是周、月、年等")
    private int lockedDays;

    /**
     * 锁仓释放：释放类型(0：等额释放，1：等比释放)
     */
    @ApiModelProperty("锁仓释放：释放类型（0：等额释放，1：等比释放）")
    private int releaseType = 0;

    /**
     * 锁仓释放：释放比例（等比释放，该数值如输入 0.2则代表每周期释放20%）
     */
    @ApiModelProperty("锁仓释放：释放比例(等比释放，该数值如输入 0.2则代表每周期释放20%)")
    private BigDecimal releasePercent = BigDecimal.ZERO;

    /**
     * 锁仓释放：门槛费
     */
    @ApiModelProperty("锁仓释放：门槛费")
    private BigDecimal lockedFee = BigDecimal.ZERO;

    /**
     * 锁仓释放：释放数量（等额释放）
     */
    @ApiModelProperty("锁仓释放：释放数量(等额释放)")
    private BigDecimal releaseAmount = BigDecimal.ZERO;

    /**
     * 锁仓释放：释放倍数
     */
    @ApiModelProperty("锁仓释放：释放倍数")
    private BigDecimal releaseTimes = BigDecimal.ZERO;

    /**
     * 邀请好友（且购买矿机/锁仓）产能增加百分比（为0则不增加）
     */
    @ApiModelProperty("邀请好友（且购买矿机/锁仓）产能增加百分比（为0则不增加）")
    private BigDecimal miningInvite = BigDecimal.ZERO;

    /**
     * 产能增加上限百分比（为0则无上限）
     */
    @ApiModelProperty("产能增加上限百分比（为0则无上限）")
    private BigDecimal miningInviteLimit = BigDecimal.ZERO;

    /**
     * 其他活动配置信息（JSON）
     */
    @ApiModelProperty("其他活动配置信息(JSON)")
    private String settings;

    /**
     * 活动标题
     */
    @ApiModelProperty("活动标题")
    private String title;

    /**
     * 活动标题(英文，可选)
     */
    @ApiModelProperty("活动标题(英文，可选)")
    private String titleEN;

    /**
     * 活动简介
     */
    @ApiModelProperty("活动简介")
    private String detail;

    /**
     * 活动简介（英文，可选)
     */
    @ApiModelProperty("活动简介（英文，可选)")
    private String detailEN;

    /**
     * 活动详情
     */
    @ApiModelProperty("活动详情")
    private String content = "";

    /**
     * 活动详情（英文，可选）
     */
    @ApiModelProperty("活动详情(英文，可选)")
    private String contentEN = "";

    /**
     * 列表展示图片（Small）
     */
    @ApiModelProperty("列表展示图片(Small)")
    private String smallImageUrl;

    /**
     * Banner活动图片（Banner）
     */
    @ApiModelProperty("Banner活动图片(Banner)")
    private String bannerImageUrl;

    /**
     * 公告链接（活动详情链接）
     */
    @ApiModelProperty("公告链接(活动详情链接)")
    private String noticeLink;

    /**
     * 活动链接（实际参与页面链接）
     */
    @ApiModelProperty("活动链接(实际参与页面链接)")
    private String activityLink;

    /**
     * 创建时间（用于排序使用）
     */
    @ApiModelProperty("创建时间(用于排序使用)")
    private LocalDateTime createTime;
}
